package cn.mccraft.uide.api.property.value;

import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
import com.google.gson.JsonPrimitive;

public abstract class EnumValue<T extends Enum<T>> extends BaseValue<T>{

	public EnumValue() {}
	
	public EnumValue(T initialValue) {
		super(initialValue);
	}

	@Override
	public JsonElement serialize() {
		T value = getValue();
		if (value != null)
			return new JsonPrimitive(value.name());
		else
			return JsonNull.INSTANCE;
	}

	@SuppressWarnings("unchecked")
	@Override
	public void deserialize(JsonElement jsonElement) {
		if (!jsonElement.isJsonNull()) {
			try {
				setValue(Enum.valueOf((Class<T>) getType().getRawType(), jsonElement.getAsString()));
			} catch (IllegalArgumentException | NullPointerException e) {
				setValue(null);
			}
		} else {
			setValue(null);
		}
	}
}
